#ifndef EVENTS_HPP
#define EVENTS_HPP

#include <eosim/core/bevent.hpp>
#include <eosim/core/entity.hpp>
#include <eosim/core/cevent.hpp>
#include <string>

const std::string endVL =		"EndViaje";
const std::string startVL =		"StartViaje";
const std::string endML =		"MaduracionLeon";
const std::string crCL =		"CrianzaCachorros";
const std::string evNC =		"NacimientoCamada";
const std::string endAL =		"EndApareamiento";
const std::string startAL =		"Startpareamiento";

const double costoViaje[4][4] = {{0, 0, 0, 28},{0, 0, 21, 0},{0, 28, 0, 14}, {21, 0, 14, 0 } };

class EndViaje: public eosim::core::BEvent {
public:
	EndViaje(eosim::core::Model& model);
	~EndViaje();
	void eventRoutine(eosim::core::Entity* who);
};

class StartViaje: public eosim::core::BEvent {
public:
	StartViaje(eosim::core::Model& model);
	~StartViaje();
	void eventRoutine(eosim::core::Entity* who);
};

class MaduracionLeon: public eosim::core::BEvent {
public:
	MaduracionLeon(eosim::core::Model& model);
	~MaduracionLeon();
	void eventRoutine(eosim::core::Entity* who);
};

class CrianzaCachorros: public eosim::core::BEvent {
public:
	CrianzaCachorros(eosim::core::Model& model);
	~CrianzaCachorros();
	void eventRoutine(eosim::core::Entity* who);
};

class NacimientoCamada: public eosim::core::BEvent {
public:
	NacimientoCamada(eosim::core::Model& model);
	~NacimientoCamada();
	void eventRoutine(eosim::core::Entity* who);
};

class EndApareamiento: public eosim::core::BEvent {
public:
	EndApareamiento(eosim::core::Model& model);
	~EndApareamiento();
	void eventRoutine(eosim::core::Entity* who);
};

class StartApareamiento: public eosim::core::BEvent {
public:
	StartApareamiento(eosim::core::Model& model);
	~StartApareamiento();
	void eventRoutine(eosim::core::Entity*);
};

#endif


